#!c:/perl/bin/perl.exe
##########################################################################################################################
##### a script merge players in Wigan-Warriors.com
##########################################################################################################################

##########################################################################################################################
######  TODO list  #######################################################################################################
##########################################################################################################################
##########################################################################################################################

##########################################################################################################################
###### Bug list
##########################################################################################################################
##########################################################################################################################

##########################################################################################################################
# Includes
##########################################################################################################################

use lib qw(../cgi-bin);
use DBI;
use WiganRL;

use WiganRL::DataObject qw(:constants);
use WiganRL::DataObject::Player;
use WiganRL::DataObject::Squadplayer;
use WiganRL::DataObject::Playersigning;
use WiganRL::DataObject::Squad;
use WiganRL::Search;

use Getopt::Long;
use File::Glob;
use File::Basename;

use strict;

#use warnings;
local $SIG{__WARN__} = \&Carp::cluck;  #full call back trace

$|++;  #unbuffered

##########################################################################################################################
# get arguments
##########################################################################################################################

my $dir= "c:/wwcom/v2.0/html/images/useractions/emoticons";
my $type= "*.gif";
#my $permissions= 3;
my ($id1,$id2);
GetOptions ('id1=i' => \$id1, 'id2=i' => \$id2);

if (!defined $id1 || !defined $id2) {
	print "Must specify both player ids\n";
	exit(1);
} else {
   print "Replacing player $id2 with player $id1\n";
}


##########################################################################################################################
# site setup and location variable declarations
##########################################################################################################################
my $cfg= WiganRL::DataObject->load_config('../cgi-bin/wiganrl.ini');

my $cgi= CGI::Simple->new();

my $dbh= Diva::DB->new();
$dbh->set( {
	DATABASE_NAME       => $cfg->val('database', 'DATABASE_NAME'),
	DATABASE_SERVER     => $cfg->val('database', 'DATABASE_SERVER'),
	DATABASE_USERNAME   => $cfg->val('database', 'DATABASE_USERNAME'),
	DATABASE_PASSWORD   => $cfg->val('database', 'DATABASE_PASSWORD'),
	DATABASE_TYPE       => $cfg->val('database', 'DATABASE_TYPE'),
	} );
$dbh->connect();
WiganRL::DataObject->dbh($dbh);
WiganRL::Search->dbh($dbh);
WiganRL::DataObject->init_class('WWCOM');  #loads contenttypes
WiganRL::DataObject->cgi($cgi);
WiganRL::DataObject->user(WiganRL::DataObject::User->new($cfg->val('site','SITE_ADMINUSER')));

##########################################################################################################################
# DO merge
##########################################################################################################################


#get players
my ($p1, $p2);
my $s= WiganRL::Search->new;
$s->table('PLAYER');
$s->where('PK_OBJECT_ID = '.$id1);
my $res= $s->search;
if ($#$res < 0) {
	print "No player with ID: $id1\n";
	exit(1);
}
$p1= $res->[0];
print "Found player: $id1 - ".$p1->param('PLAYER_NAME')."\n";
$s->where('PK_OBJECT_ID = '.$id2);
my $res= $s->search;
if ($#$res < 0) {
	print "No player with ID: $id2\n";
	exit(1);
}
$p2= $res->[0];
print "Found player: $id2 - ".$p2->param('PLAYER_NAME')."\n";

#check if we have entries for player profile information for player 2
if ($p2->param('PLAYER_PROFILE') ne '') {
	print "Player $id2 has profile information: please merge manually\n";
	exit(1);
}

#check they are still in the same team
if ($p2->param('FK_TEAM_ID') != $p1->param('FK_TEAM_ID')) {
	print "Players teams are inconsistent: please merge manually\n";
	exit(1);    
	#TODO: choose correct team here
}

#replace player 2 with player 1 in all relevent tables
#check all squads that player 2 is in.
$s->clear; $s->table('SQUADPLAYER');
$s->where('FK_PLAYER_ID='.$id2);
my $s2= WiganRL::Search->new;

for my $sp2 (@{$s->search}) {
	print "Processing Squad player: ".$sp2->id."\n";
	#is there a player one in this squad already?
	$s2->clear; $s2->table('SQUADPLAYER');
	$s2->where('FK_PARENT_ID='.$sp2->squad->id.' and FK_PLAYER_ID='.$id1);    
	my $res= $s2->search;
	if ($#$res >= 0) {  #there is
		my $sp1= $res->[0];
		#remove it
		$dbh->dbdelete('SQUADPLAYER','FK_OBJECT_ID='.$sp2->id);
		$dbh->dbdelete('OBJECT','PK_OBJECT_ID='.$sp2->id);
		print "Removing squad player: ".$sp2->id."\n";
		#replace all references to it with the correct squad player
		$dbh->update('TEAMPLAYER',['FK_PLAYER_ID','FK_SQUADPLAYER_ID'],[$id1,$sp1->id],'FK_SQUADPLAYER_ID='.$sp2->id);        
		print "Updating team players as: $id1, ".$sp1->id."\n";
	} else { #there isn't
		#update squad player to be player 1
		$dbh->update('SQUADPLAYER',['FK_PLAYER_ID'],[$id1],'FK_OBJECT_ID='.$sp2->id);        
		print "Updating squad player as: $id1\n";
	}
	
	#now get any other entries in team player and squad player that we may have missed (shouldn't be any!)
	$dbh->update('TEAMPLAYER',['FK_PLAYER_ID'],[$id1],'FK_PLAYER_ID='.$id2);
	$dbh->update('SQUADPLAYER',['FK_PLAYER_ID'],[$id1],'FK_PLAYER_ID='.$id2);
	
	#now remove any player contracts associated with player 2
	$s2->clear; $s2->table('PLAYERSIGNING');
	$s2->where('FK_PARENT_ID='.$id2);
	for my $ps2 (@{$s2->search}) {
		$dbh->dbdelete('PLAYERSIGNING','FK_OBJECT_ID='.$ps2->id);
		$dbh->dbdelete('OBJECT','PK_OBJECT_ID='.$ps2->id);
		print "Deleting player signing: ".$ps2->id."\n";
	}    
}

print "Deleting player: $id2\n";
$dbh->dbdelete('PLAYER','FK_OBJECT_ID='.$id2);
$dbh->dbdelete('OBJECT','PK_OBJECT_ID='.$id2);

	
exit(0);
